local key = KEYS[1]
local id = redis.call('get',key)
if(id == false)
then redis.call('set',key,1)
    return key.."0001";
else
    id = id+1
    redis.call('set',key,id)
    return key..string.format("%04d",id)
end
--[[
在执行Lua脚本时，Redis是阻塞的。
所以一方面Lua和Pipeline一样，包含的命令都不要太多，
另外在Lua执行的逻辑中也不要有太耗时的业务逻辑，可能会由于Lua脚本逻辑有问题，产生死循环从而导致整个Redis服务的不可用。
所以Lua脚本虽然好用，但是使用不当破坏性也是难以想象的，用这之前还是要确保Lua的正确性。


lua中 JAVA中的null对应Lua的nil  a=nil 如果要判断 可以 直接 if(a == false)简单易懂 或则 if(not a)不好理解，有点绕
操作符
+	加法	A + B 输出结果 30
-	减法	A - B 输出结果 -10
*	乘法	A * B 输出结果 200
/	除法	B / A w输出结果 2
%	取余	B % A 输出结果 0
^	乘幂	A^2 输出结果 100
-	负号	-A 输出结果 -10

    关系运算符  ==	~=（不等于，其他和java一样）	>	<	>=	 <=
     条件判断 not and or    如：not( a and b)
    lua中运算
        ..表示字符串连接，key=fkfjskjfs最终返回 fkfjskjfs0001
        #	一元运算符，返回 字符串或表 的长度。	#"Hello" 返回 5

    -- 定义一个Hash
    local tables user_1 = {age = 27, name = "Dawn"}
    -- 打印输出名字
    print("user_1 name is " .. user_1["name"])
    -- user_1 name is Dawn

    for循环
    for var=exp1,exp2,exp3 do
 <执行体>
 end
var从exp1变化到exp2，每次变化以exp3为步长递增var，并执行一次”执行体”。exp3是可选的，如果不指定，默认为1。
    local int sum = 0
     for i = 1, 100
     do
     sum = sum + i
     end
    --  输出结果为 5050
     print(sum)

     while循环
     local int sum = 0
     local int i = 0
     while i <= 100
     do
     sum = sum +i
     i = i + 1
     end
     输出结果为 5050
    print(sum)

        函数定义
    在Lua中，函数以function开头，以end结尾，funcName是函数名，中间部分是函数体。
     格式
    function funcName()
     ...
     end
     contact 函数将两个字符串拼接
    function contact(str1, str2)
     return str1 .. str2
     end
     函数调用
    print(contact("hello ", "Dawn"))
    hello Dawn

    清除 Redis 内存已加载的所有 Lua 脚本
    script flush
]]
